#include "simple.h"

#include "sq_list.h"

void
sq_list_test()
{
	sq_list * o = sq_list_create();

	sq_list_display(o);

	elem_t vec[] = {68, 2, 6, 432, 65, 314, 213};

	sq_list_set(o, vec, sizeof(vec) / sizeof(elem_t));
	sq_list_display(o);

	{
		printf(" --> %u \n", sq_list_len(o));
		printf(" empty : %d \n", sq_list_empty(o));
	}

	printf(" ---------------- \n");

	{
		sq_list * l = sq_list_clone(o);
		sq_list_display(l);
		sq_list_clear(l);
		sq_list_display(l);
		sq_list_release(l);
	}

	printf(" ---------------- \n");

	{
		sq_list * l = sq_list_clone(o);

		elem_t e;
		int ret = 0;

		for (index_t i = 0; i < 9; ++i) {
			ret = sq_list_get(l, i, &e);
			printf(" %d : %d : %u \n", i, ret, e);
		}

		index_t i;

		e = 314;
		i = sq_list_locate(l, e);
		printf(" %u locate on %d \n", e, i);

		e = 213;
		i = sq_list_locate(l, e);
		printf(" %u locate on %d \n", e, i);

		e = 3;
		i = sq_list_locate(l, e);
		printf(" %u locate on %d \n", e, i);

		sq_list_release(l);
	}

	printf(" ---------------- \n");

	{
		sq_list * l = sq_list_clone(o);
		sq_list_display(l);

		sq_list_insert(l, 3, 999);
		sq_list_display(l);

		elem_t e;
		sq_list_delete(l, 3, &e);
		sq_list_display(l);
		printf(" deleted : %u \n", e);

		int d = sq_list_delete_range(l, 200, 300);
		sq_list_display(l);
		printf(" deleted : %d \n", d);

		d = sq_list_delete_range2(l, 300, 500);
		sq_list_display(l);
		printf(" deleted : %d \n", d);

		sq_list_release(l);
	}

	printf(" ---------------- \n");

	{
		sq_list * l = sq_list_clone(o);

		sq_list_display(l);
		sq_list_rotate(l);
		sq_list_display(l);

		sq_list_release(l);
	}

	printf(" ---------------- \n");

	{
		sq_list * l = sq_list_clone(o);

		sq_list_display(l);
		sq_list_rotate2(l);
		sq_list_display(l);

		sq_list_release(l);
	}
}


